package com.szml.common.app.utils;

import org.springframework.util.DigestUtils;

import java.util.UUID;


/**
 * 用户密码加密和比对
 */
public abstract class PasswordUtil {
    private static final String SEPARATOR = "#";

    //加密
    public static String encryptPwd(String password) {
        String frontMatter = UUID.randomUUID().toString().replace("-", "");  //生成32位的一个前置校验
        String endMatter = DigestUtils.md5DigestAsHex((frontMatter + password).getBytes());     // 将明文密码和前置校验拼接进行md5加密
        return frontMatter + SEPARATOR + endMatter; // 将前置校验加上一个$加上前置校验和明文密码加在一起加密后的后置校验共65位
    }


    private static String getExpectPwd(String frontMatter, String originalPwd) {
        return frontMatter + SEPARATOR + DigestUtils.md5DigestAsHex((frontMatter + originalPwd).getBytes());
    }

    //校验
    public static boolean check(String encryptedPwd, String originalPwd) {
        //取得加密后密码的前32位
        String frontMatter = encryptedPwd.split(SEPARATOR)[0];
        String expectPwd = getExpectPwd(frontMatter, originalPwd);
        return encryptedPwd.equals(expectPwd);
    }
}
